package org.japo.java.swing.igu;

import java.awt.HeadlessException;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.japo.java.swing.listeners.GEV;

public class IGU extends JFrame {

    // Fichero de bloqueo
    private final String F_BLOQUEO = "instancia.lck";

    public IGU() throws HeadlessException {
        iniciarComponentes();
    }

    private void iniciarComponentes() {
        // Panel principal
        JPanel pnlPrincipal = new JPanel();

        // Gestor de eventos de ventana
        GEV gev = new GEV(this);

        // Ventana
        setTitle("Ventana");
        setContentPane(pnlPrincipal);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        addWindowListener(gev);
        setSize(300, 200);
        setLocationRelativeTo(null);
    }

    public void activarInstancia() throws IOException {
        // Crea un objeto File a partir del nombre del fichero
        File f = new File(F_BLOQUEO);

        // Comprueba si el fichero fisico existe o no
        boolean existeOK = f.exists();

        // Tramita el resultado de la comprobación
        if (!existeOK) {
            f.createNewFile();
        } else {
            throw new IOException("Ya existe una copia en ejecucion");
        }
    }

    public void desactivarInstancia() throws IOException {
        File f = new File(F_BLOQUEO);

        boolean existeOK = f.exists();

        if (existeOK) {
            f.delete();
        } else {
            throw new IOException("Hay un problema en la anulación del bloqueo");
        }
    }

    public void terminarPrograma() {
        // Oculta la ventana
        setVisible(false);

        // Libera recursos gráficos
        dispose();

        // Termina el hilo principal
        System.exit(0);
    }
}
